package com.jaws.core.mvc.exception;

/**
 * 顶层异常
 * 返回状态码(错误码)
 * <p>
 * <ul>
 * <li>公共模块: 100,公共模块错误码: 100000~100999</li>
 * <li>用户模块: 200,用户模块错误码: 200000~200999</li>
 * <li>账户模块: 300,账户模块错误码: 300000~309999</li>
 * <li>合同模块: 310,结算模块错误码: 310000~319999</li>
 * <li>产品模块: 400,产品模块错误码: 400000~400999</li>
 * <li>结算模块: 410,结算模块错误码: 410000~410999</li>
 * <li>交易模块: 420,交易模块错误码: 420000~429999</li>
 * <li>支付模块: 500,支付模块错误码: 500000~500999</li>
 * <li>文件模块: 510,报备模块错误码: 510000~510999</li>
 * <li>报备模块: 520,报备模块错误码: 520000~520999</li>
 * <li>对账模块: 530,对账模块错误码: 530000~530999</li>
 * <li>活动模块: 600,活动模块错误码: 600000~600999</li>
 * <li>消息模块: 700,消息模块错误码: 700000~700999</li>
 * <li>前端模块: 800,</li>
 * <li>友金社模块: 900,</li>
 * </ul>
 * </p >
 * 
 * @author maojian
 * @date 2017-05-10 17:37:04
 * @since v1.0.0
 */
public class ApplicationException extends RuntimeException {

	private static final long serialVersionUID = 1L;

	/**
	 * 异常错误码
	 */
	protected int code;

	/**
	 * 异常信息的参数
	 */
	protected Object[] args;

	/**
     * 
     */
	public ApplicationException() {
		super();
	}

	/**
	 * @param message
	 *        错误信息
	 */
	public ApplicationException(String message) {
		super(message);
	}

	/**
	 * @param message
	 *        错误信息
	 * @param cause
	 *        原始异常
	 */
	public ApplicationException(String message, Throwable cause) {
		super(message, cause);
	}

	/**
	 * @param code
	 *        错误码
	 * @param message
	 *        错误信息
	 */
	public ApplicationException(int code, String message) {
		super(message);
		this.code = code;
	}

	/**
	 * @param code
	 *        错误码
	 * @param message
	 *        错误信息
	 * @param cause
	 *        原始异常
	 */
	public ApplicationException(int code, String message, Throwable cause) {
		super(message, cause);
		this.code = code;
	}

	/**
	 * @param message
	 *        错误信息
	 * @param args
	 *        额外参数
	 */
	public ApplicationException(String message, Object[] args) {
		super(message);
		this.args = args;
	}

	/**
	 * @param message
	 *        错误信息
	 * @param cause
	 *        原始异常
	 * @param args
	 *        额外参数
	 */
	public ApplicationException(String message, Throwable cause, Object[] args) {
		super(message, cause);
		this.args = args;
	}

	/**
	 * @param code
	 *        错误码
	 * @param message
	 *        错误信息
	 * @param args
	 *        额外参数
	 */
	public ApplicationException(int code, String message, Object[] args) {
		super(message);
		this.code = code;
		this.args = args;
	}

	/**
	 * @param code
	 *        错误码
	 * @param message
	 *        错误信息
	 * @param cause
	 *        原始异常
	 * @param args
	 *        额外参数
	 */
	public ApplicationException(int code, String message, Throwable cause, Object[] args) {
		super(message, cause);
		this.code = code;
		this.args = args;
	}

	public int getCode() {
		return code;
	}

	public Object[] getArgs() {
		return args;
	}

}
